import vue from "@vitejs/plugin-vue";
// config alias
import path from "path";
import { ConfigEnv, defineConfig, UserConfigExport } from "vite";
import ViteComponents, { AntDesignVueResolver } from "vite-plugin-components";
// Introduce eslint plugin
import eslintPlugin from "vite-plugin-eslint";
import OptimizationPersist from "vite-plugin-optimize-persist";
import PkgConfig from "vite-plugin-package-config";
import viteSvgIcons from "vite-plugin-svg-icons";
import { viteVConsole } from "vite-plugin-vconsole";

// https://vitejs.dev/config/
export default ({ command, mode }: ConfigEnv): UserConfigExport =>
  defineConfig({
    plugins: [
      vue(),
      eslintPlugin({
        fix: true,
      }),
      ViteComponents({
        customComponentResolvers: [AntDesignVueResolver()],
      }),
      viteSvgIcons({
        // 指定需要缓存的图标文件夹
        iconDirs: [path.resolve(process.cwd(), "src/assets/icons")],
        // 指定symbolId格式
        symbolId: "icon-[dir]-[name]",
      }),
      viteVConsole({
        entry: path.resolve(__dirname, "./src/main.ts"), // 入口文件
        localEnabled: command === "serve", // serve开发环境下
        // enabled: command !== 'serve' || mode === 'test', // 打包环境下/发布测试包,
        config: {
          // vconsole 配置项
          maxLogNumber: 1000,
          theme: "light",
        },
      }),
      PkgConfig(),
      OptimizationPersist(),
      // [svgBuilder('./src/assets/icons/')] // All svg under src/icons/svg/ have been imported here, no need to import separately
    ],
    server: {
      open: false,
      host: "0.0.0.0",
      port: 8080,
    },
    envDir: "./env",
    resolve: {
      alias: [
        {
          // https://github.com/vitejs/vite/issues/279#issuecomment-635646269
          find: "/@",
          replacement: path.resolve(__dirname, "./src"),
        },
      ],
    },
    css: {
      preprocessorOptions: {
        scss: {
          // example : additionalData: `@import "./src/design/styles/variables";`
          // dont need include file extend .scss
          additionalData: '@import "./src/styles/variables";',
        },
      },
    },
    base: "/",
    build: {
      target: ["es2015"], // 最低支持 es2015
      sourcemap: true,
    },
  });
